﻿/********************************************************************************
** @ Date:2025/06/20
** @ Author: Gaojia
** @ Description: 组合场景管理类
** @ Version:1.0.0
** @ Fun:
********************************************************************************/
#ifndef USceneManager_H
#define USceneManager_H

#include <QWidget>
#include <QXmlStreamReader>
#include "CPageModel.h"
#include "UDropCellWidget.h"
#include "ui_USceneManager.h"
#include "CNodeScene.h"
#include "CPageScene.h"
class USceneManager : public QWidget
{
	Q_OBJECT
public:
	USceneManager(QWidget *parent = nullptr);
	~USceneManager();
	void refushUi();
	void setDropCellWidget(UDropCellWidget *pWidget);               //设置9宫格管理界面的指针   
	void addNode(CBaseScene* parent);                               // 添加普通节点
	void addPage(CBaseScene* parent);                               // 添加组合场景
	void deleteNode(CBaseScene* node);                              // 删除节点
	void showPage(CBaseScene* node);                                // 显示页面
	void initUi();                                                   // 初始化界面
private:
	void showContextMenu(CBaseScene* node, const QPoint& globalPos); // 显示右键菜单
	void showContextLeft(CBaseScene* node); // 鼠标左键响应
	void connectTree();                                              // 连接信号槽
	void createNullMenu(const QPoint& globalPos);                   // 创建空白处点击菜单
	void createRootMenu(QMenu* menu, CBaseScene* node);              // 创建根节点菜单
	void createNodeMenu(QMenu* menu, CBaseScene* node);              // 创建普通节点菜单
	void createPageMenu(QMenu* menu, CBaseScene* node);              // 创建设备菜单
	void updateCurrPage();                                           // 刷新当前节点数据
	void refushMenu();
protected:
	bool eventFilter(QObject *obj, QEvent *event) override;
	void onTreeLeftClieck(const QPoint& pos);                      // 左键点击事件
private:
	Ui::USceneManagerClass ui;
	CPageModel* model;                 // 树模型
	CBaseScene* m_pRoot;               // 根节点
	UDropCellWidget *m_pDropWidget;
	CBaseScene * m_pNodeCurr;
public slots:
	void onTreeContextMenuRequested(const QPoint& pos);  // 请求右键菜单槽
	void renameNode(CBaseScene* node);
	void slot_addNode();
	void slot_addPage();
	void slot_deleteNode();
signals:
	void sign_Show(int nIndex);
};
#endif